import { FOR_NATIVE_JS } from '../config';
import { logError } from '../util';

window[FOR_NATIVE_JS] = {};
const nativeJs = window[FOR_NATIVE_JS];

/**
 *提供给原生的函数集合
 *
 * @class ForNativeJsAggregete
 */
export default class ForNativeJsAggregete {
    static add = (NAME, func) => {
        if (typeof NAME !== 'string' || typeof func !== 'function') {
            logError('传参有误');
            return;
        }

        if (!nativeJs[NAME]) {
            nativeJs[NAME] = [];
        }

        nativeJs[NAME].push(func);
    };

    static remove = (NAME, callback) => {
        if (!nativeJs) {
            logError('请检查当前环境');
            return;
        }

        if (callback) {
            nativeJs[NAME] = (nativeJs[NAME] || []).filter(i => i !== callback);
        }

        (!nativeJs[NAME] || !nativeJs[NAME].length) && delete nativeJs[NAME];
    };

    static call = ({ name: NAME, params = {}, eventId = '' }) => {
        if (!nativeJs) {
            logError('请检查当前环境');
            return;
        }
        const funcList = nativeJs[NAME];

        if (!funcList) {
            logError(`全局函数不存在或已删除,${NAME}`);
            return;
        }

        funcList.length
            && funcList.forEach(fn => {
                fn({ data: params, code: 0, msg: '' }, eventId);
            });
    };
}
